My solution for the Data Scientist Associate Practical Exam by DataCamp.
R
DataCamp
tidyverse
caret
Published
July 9, 2024
Introduction
RealAgents is a real estate company that focuses on selling houses and sells a variety of types of house in one metropolitan area.
Some houses sell slowly and sometimes require lowering the price in order to find a buyer. In order to stay competitive, RealAgents would like to optimize the listing prices of the houses it is trying to sell. They want to do this by predicting the sale price of a house given its characteristics. If they can predict the sale price in advance, they can decrease the time to sale.
Data Description
The dataset contains records of previous houses sold in the area.
Column Name
Criteria
house_id
Nominal. Unique identifier for houses. Missing values not possible.
city
Nominal. The city in which the house is located. One of ‘Silvertown’, ‘Riverford’, ‘Teasdale’ and ‘Poppleton’. Replace missing values with “Unknown”.
sale_price
Discrete. The sale price of the house in whole dollars. Values can be any positive number greater than or equal to zero.Remove missing entries.
sale_date
Discrete. The date of the last sale of the house. Replace missing values with 2023-01-01.
months_listed
Continuous. The number of months the house was listed on the market prior to its last sale, rounded to one decimal place. Replace missing values with mean number of months listed, to one decimal place.
bedrooms
Discrete. The number of bedrooms in the house. Any positive values greater than or equal to zero. Replace missing values with the mean number of bedrooms, rounded to the nearest integer.
house_type
Ordinal. One of “Terraced” (two shared walls), “Semi-detached” (one shared wall), or “Detached” (no shared walls). Replace missing values with the most common house type.
area
Continuous. The area of the house in square meters, rounded to one decimal place. Replace missing values with the mean, to one decimal place.
Task 1
The team at RealAgents knows that the city, that a property is located in, makes a difference to the sale price.
Unfortunately they believe that this isn’t always recorded in the data.
Calculate the number of missing values of the city.
You should use the data in the file “house_sales.csv”.
Your output should be an object missing_city, that contains the number of missing values in this column.
Rows: 1500 Columns: 8
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (3): city, house_type, area
dbl (4): house_id, sale_price, months_listed, bedrooms
date (1): sale_date
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Before you fit any models, you will need to make sure the data is clean.
The table below shows what the data should look like.
Create a cleaned version of the dataframe.
You should start with the data in the file “house_sales.csv”.
Your output should be a dataframe named clean_data.
All column names and values should match the table below.
Column Name
Criteria
house_id
Nominal. Unique identifier for houses. Missing values not possible.
city
Nominal. The city in which the house is located. One of ‘Silvertown’, ‘Riverford’, ‘Teasdale’ and ‘Poppleton’ Replace missing values with “Unknown”.
sale_price
Discrete. The sale price of the house in whole dollars. Values can be any positive number greater than or equal to zero.Remove missing entries.
sale_date
Discrete. The date of the last sale of the house. Replace missing values with 2023-01-01.
months_listed
Continuous. The number of months the house was listed on the market prior to its last sale, rounded to one decimal place. Replace missing values with mean number of months listed, to one decimal place.
bedrooms
Discrete. The number of bedrooms in the house. Any positive values greater than or equal to zero. Replace missing values with the mean number of bedrooms, rounded to the nearest integer.
house_type
Ordinal. One of “Terraced”, “Semi-detached”, or “Detached”. Replace missing values with the most common house type.
area
Continuous. The area of the house in square meters, rounded to one decimal place. Replace missing values with the mean, to one decimal place.
The rest of the columns already match the conditions.
Task 3
The team at RealAgents have told you that they have always believed that the number of bedrooms is the biggest driver of house price.
Producing a table showing the difference in the average sale price by number of bedrooms along with the variance to investigate this question for the team.
You should start with the data in the file ‘house_sales.csv’.
Your output should be a data frame named price_by_rooms.
It should include the three columns bedrooms, avg_price, var_price.
Your answers should be rounded to 1 decimal place.
One of the common mistakes is using the clean_data instead of the original one.
You need the caret and kernlab packages installed for the following models in this section.
Fit a baseline model to predict the sale price of a house.
Fit your model using the data contained in “train.csv”
Use “validation.csv” to predict new values based on your model. You must return a dataframe named base_result, that includes house_id and price. The price column must be your predicted values.
library(caret)set.seed(8)# Reading datatrain<-readr::read_csv("train.csv")test<-readr::read_csv("validation.csv")# Extracting the sale price column from the train dataprice_train<-train$sale_pricetrain$sale_price=NULL# One-hot encoding categorical columnsdum1<-dummyVars(" ~ .", data =train)train<-predict(dum1, train)# Extracting the house id column before one-hot encoding the columnsid<-test$house_iddum2<-dummyVars(" ~ .", data =test)test<-predict(dum2, test)# Training the first model with tuningglmnet<-train(data.frame(train),price_train, method ="glmnet", tuneLength =20)# Results dataframebase_result<-data.frame(house_id =id, price =predict(glmnet, newdata =data.frame(test)))
The final values used for the model were alpha = 1 and lambda = 305.2986.
Task 5
Fit a comparison model to predict the sale price of a house.
Fit your model using the data contained in “train.csv”
Use “validation.csv” to predict new values based on your model. You must return a dataframe named compare_result, that includes house_id and price. The price column must be your predicted values.